package list

/*
	给定两个大小分别为 m 和 n 的正序（从小到大）数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数 。

	输入：nums1 = [1,3], nums2 = [2]
	输出：2.00000
	解释：合并数组 = [1,2,3] ，中位数 2
*/

import "fmt"

// 执行耗时：16ms 76.30%
// 内存消耗：6.5mb 5.48
func FindMedianSortedArraysByMySelf(nums1 []int, nums2 []int) float64 {
	m := len(nums1)
	n := len(nums2)

	var res float64

	if n == 0 && m == 0 {
		return 0
	}

	if m > 0 && n == 0 {
		if m%2 == 0 {
			mid := m / 2
			res = float64(nums1[mid] + nums1[mid-1])
			res = res / 2
			return res
		} else {
			mid := (m - 1) / 2
			res = float64(nums1[mid])
			return res
		}

	}

	if n > 0 && m == 0 {
		if n%2 == 0 {
			mid := n / 2
			res := float64(nums2[mid] + nums2[mid-1])
			res = res / 2
			return res
		} else {
			mid := (n - 1) / 2
			res := float64(nums2[mid])
			return res
		}

	}

	var nums3 []int
	head_1 := 0
	head_2 := 0

	for head_1 < m && head_2 < n {
		if nums1[head_1] <= nums2[head_2] {
			nums3 = append(nums3, nums1[head_1])
			head_1++
			continue
		} else if nums1[head_1] > nums2[head_2] {
			nums3 = append(nums3, nums2[head_2])
			head_2++
			continue
		}
	}

	if head_1 == m {
		for head_2 < n {
			nums3 = append(nums3, nums2[head_2])
			head_2++
		}
	}
	if head_2 == n {
		for head_1 < m {
			nums3 = append(nums3, nums1[head_1])
			head_1++
		}
	}

	fmt.Println(nums3)
	fmt.Println(m, " ", n)

	if (m+n)%2 == 0 {
		mid := (m + n) / 2
		fmt.Println(mid)
		res = float64(nums3[mid] + nums3[mid-1])
		res = res / 2
		return res
	} else {
		mid := (m + n - 1) / 2
		fmt.Println(mid)
		res = float64(nums3[mid])
		return res
	}

}
